#ifndef PIXEL_DATA_H
#define PIXEL_DATA_H

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <string.h>

typedef uint32_t u32;

// 定义坐标结构体
typedef struct {
    size_t x;
    size_t y;
} Coordinate;

// 定义二维数组结构体
typedef struct {
    size_t width;
    size_t height;
    u32** data; // 动态分配的二维数组
} Array2D;

// 动态分配二维数组
Array2D* allocate_2d_array(size_t width, size_t height);

// 释放二维数组
void free_2d_array(Array2D* array);

// 给定坐标赋值
int set_value(Array2D* array, const Coordinate coord, u32 value);

// 读取指定坐标的值
u32 get_value(const Array2D* array, const Coordinate coord);

// 清除数组内容（将所有元素设置为 0）
void clear_array(Array2D* array);

// 将所有数据输出到文件
int save_to_file(const Array2D* array, const char* filename);

// 从文件中读取二维数组数据
Array2D* load_from_file(const char* filename);


// 新增函数：按行打印数组，每8个点位合成一个字节（十六进制）
void print_array_as_hex(const Array2D* array, uint16_t x, uint16_t y);

// 新增函数：将数组保存为RGB图像文件
int save_as_image(const Array2D* array, const char* filename);

// 主函数测试
int mainTest();
#endif